lib: Define and use cleanup functions for gpgme
authorColin Walters <walters@verbum.org>
Wed, 16 Nov 2016 14:19:52 +0000 (09:19 -0500)
committerAtomic Bot <atomic-devel@projectatomic.io>
Thu, 17 Nov 2016 09:44:07 +0000 (09:44 +0000)
Just a cleanup in preparation for future work.

Closes: #575
Approved by: giuseppe

src/libostree/ostree-gpg-verifier.c
src/libostree/ostree-repo.c
src/libotutil/ot-gpg-utils.h

index d487507f89696291061de44f2f66df65e25253cf..9eae7ceb01ee0d4ea15823ddffbc57e69d2e270f 100644 (file)
@@ -25,6 +25,7 @@
 
 #include "libglnx.h"
 #include "ostree-gpg-verifier.h"
+#include "ot-gpg-utils.h"
 #include "ostree-gpg-verify-result-private.h"
 #include "otutil.h"
 
@@ -89,10 +90,9 @@ _ostree_gpg_verifier_check_signature (OstreeGpgVerifier  *self,
                                       GCancellable       *cancellable,
                                       GError            **error)
 {
-  gpgme_ctx_t gpg_ctx = NULL;
   gpgme_error_t gpg_error = 0;
-  gpgme_data_t data_buffer = NULL;
-  gpgme_data_t signature_buffer = NULL;
+  ot_auto_gpgme_data gpgme_data_t data_buffer = NULL;
+  ot_auto_gpgme_data gpgme_data_t signature_buffer = NULL;
   g_autofree char *tmp_dir = NULL;
   g_autoptr(GOutputStream) target_stream = NULL;
   OstreeGpgVerifyResult *result = NULL;
@@ -191,14 +191,6 @@ _ostree_gpg_verifier_check_signature (OstreeGpgVerifier  *self,
   success = TRUE;
 
 out:
-
-  if (gpg_ctx != NULL)
-    gpgme_release (gpg_ctx);
-  if (data_buffer != NULL)
-    gpgme_data_release (data_buffer);
-  if (signature_buffer != NULL)
-    gpgme_data_release (signature_buffer);
-
   if (success)
     {
       /* Keep the temporary directory around for the life of the result
index ad6294210a88533023000351ff07be15fd5897ba..183feba5af6e0b053977f92cbbdc492a41be8638 100644 (file)
@@ -1440,9 +1440,9 @@ ostree_repo_remote_gpg_import (OstreeRepo         *self,
                                GError            **error)
 {
   OstreeRemote *remote;
-  gpgme_ctx_t source_context = NULL;
-  gpgme_ctx_t target_context = NULL;
-  gpgme_data_t data_buffer = NULL;
+  ot_auto_gpgme_ctx gpgme_ctx_t source_context = NULL;
+  ot_auto_gpgme_ctx gpgme_ctx_t target_context = NULL;
+  ot_auto_gpgme_data gpgme_data_t data_buffer = NULL;
   gpgme_import_result_t import_result;
   gpgme_import_status_t import_status;
   const char *tmp_dir = NULL;
@@ -1700,15 +1700,6 @@ out:
   if (target_tmp_dir != NULL)
     (void) glnx_shutil_rm_rf_at (AT_FDCWD, target_tmp_dir, NULL, NULL);
 
-  if (source_context != NULL)
-    gpgme_release (source_context);
-
-  if (target_context != NULL)
-    gpgme_release (target_context);
-
-  if (data_buffer != NULL)
-    gpgme_data_release (data_buffer);
-
   g_prefix_error (error, "GPG: ");
 
   return ret;
index edb249f4705c3f2eea09defe7bb08956f88be3fe..b479a3a92a8dfedbfbd223f1f9ae85917223e6a6 100644 (file)
 
 #include <gpgme.h>
 #include <gio/gio.h>
+#include "libglnx.h"
 
 G_BEGIN_DECLS
 
+GLNX_DEFINE_CLEANUP_FUNCTION0(gpgme_data_t, ot_cleanup_gpgme_data, gpgme_data_release)
+#define ot_auto_gpgme_data __attribute__((cleanup(ot_cleanup_gpgme_data)))
+GLNX_DEFINE_CLEANUP_FUNCTION0(gpgme_ctx_t, ot_cleanup_gpgme_ctx, gpgme_release)
+#define ot_auto_gpgme_ctx __attribute__((cleanup(ot_cleanup_gpgme_ctx)))
+
 void ot_gpgme_error_to_gio_error (gpgme_error_t gpg_error, GError **error);
 
 gboolean ot_gpgme_ctx_tmp_home_dir (gpgme_ctx_t     gpgme_ctx,